home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-SPAR.{_A / PSTATE.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  5KB  |  117 lines

  1. /* $Id: pstate.h,v 1.6 1997/06/25 07:39:45 jj Exp $ */
  2. #ifndef _SPARC64_PSTATE_H
  3. #define _SPARC64_PSTATE_H
  4.  
  5. /* The V9 PSTATE Register (with SpitFire extensions).
  6.  *
  7.  * -----------------------------------------------------------------------
  8.  * | Resv | IG | MG | CLE | TLE |  MM  | RED | PEF | AM | PRIV | IE | AG |
  9.  * -----------------------------------------------------------------------
  10.  *  63  12  11   10    9     8    7   6   5     4     3     2     1    0
  11.  */
  12. #define PSTATE_IG    0x0000000000000800    /* Interrupt Globals.        */
  13. #define PSTATE_MG    0x0000000000000400    /* MMU Globals.            */
  14. #define PSTATE_CLE    0x0000000000000200    /* Current Little Endian.    */
  15. #define PSTATE_TLE    0x0000000000000100    /* Trap Little Endian.        */
  16. #define PSTATE_MM    0x00000000000000c0    /* Memory Model.        */
  17. #define PSTATE_TSO    0x0000000000000000    /* MM: Total Store Order    */
  18. #define PSTATE_PSO    0x0000000000000040    /* MM: Partial Store Order    */
  19. #define PSTATE_RMO    0x0000000000000080    /* MM: Relaxed Memory Order    */
  20. #define PSTATE_RED    0x0000000000000020    /* Reset Error Debug State.    */
  21. #define PSTATE_PEF    0x0000000000000010    /* Floating Point Enable.    */
  22. #define PSTATE_AM    0x0000000000000008    /* Address Mask.        */
  23. #define PSTATE_PRIV    0x0000000000000004    /* Privilege.            */
  24. #define PSTATE_IE    0x0000000000000002    /* Interrupt Enable.        */
  25. #define PSTATE_AG    0x0000000000000001    /* Alternate Globals.        */
  26.  
  27. /* The V9 TSTATE Register (with SpitFire and Linux extensions).
  28.  *
  29.  * ---------------------------------------------------------------
  30.  * |  Resv  |  CCR  |  ASI  |  %pil  |  PSTATE  |  Resv  |  CWP  |
  31.  * ---------------------------------------------------------------
  32.  *  63    40 39   32 31   24 23    20 19       8 7      5 4     0
  33.  */
  34. #define TSTATE_CCR    0x000000ff00000000    /* Condition Codes.        */
  35. #define TSTATE_XCC    0x000000f000000000    /* Condition Codes.        */
  36. #define TSTATE_XNEG    0x0000008000000000    /* %xcc Negative.        */
  37. #define TSTATE_XZERO    0x0000004000000000    /* %xcc Zero.            */
  38. #define TSTATE_XOVFL    0x0000002000000000    /* %xcc Overflow.        */
  39. #define TSTATE_XCARRY    0x0000001000000000    /* %xcc Carry.            */
  40. #define TSTATE_ICC    0x0000000f00000000    /* Condition Codes.        */
  41. #define TSTATE_INEG    0x0000000800000000    /* %icc Negative.        */
  42. #define TSTATE_IZERO    0x0000000400000000    /* %icc Zero.            */
  43. #define TSTATE_IOVFL    0x0000000200000000    /* %icc Overflow.        */
  44. #define TSTATE_ICARRY    0x0000000100000000    /* %icc Carry.            */
  45. #define TSTATE_ASI    0x00000000ff000000    /* Address Space Identifier.    */
  46. #define TSTATE_PIL    0x0000000000f00000    /* %pil (Linux traps set this)  */
  47. #define TSTATE_PSTATE    0x00000000000fff00    /* PSTATE.            */
  48. #define TSTATE_IG    0x0000000000080000    /* Interrupt Globals.        */
  49. #define TSTATE_MG    0x0000000000040000    /* MMU Globals.            */
  50. #define TSTATE_CLE    0x0000000000020000    /* Current Little Endian.    */
  51. #define TSTATE_TLE    0x0000000000010000    /* Trap Little Endian.        */
  52. #define TSTATE_MM    0x000000000000c000    /* Memory Model.        */
  53. #define TSTATE_TSO    0x0000000000000000    /* MM: Total Store Order    */
  54. #define TSTATE_PSO    0x0000000000004000    /* MM: Partial Store Order    */
  55. #define TSTATE_RMO    0x0000000000008000    /* MM: Relaxed Memory Order    */
  56. #define TSTATE_RED    0x0000000000002000    /* Reset Error Debug State.    */
  57. #define TSTATE_PEF    0x0000000000001000    /* Floating Point Enable.    */
  58. #define TSTATE_AM    0x0000000000000800    /* Address Mask.        */
  59. #define TSTATE_PRIV    0x0000000000000400    /* Privilege.            */
  60. #define TSTATE_IE    0x0000000000000200    /* Interrupt Enable.        */
  61. #define TSTATE_AG    0x0000000000000100    /* Alternate Globals.        */
  62. #define TSTATE_CWP    0x000000000000001f    /* Current Window Pointer.    */
  63.  
  64. /* Floating-Point Registers State Register.
  65.  *
  66.  * --------------------------------
  67.  * |  Resv  |  FEF  |  DU  |  DL  |
  68.  * --------------------------------
  69.  *  63     3    2       1      0
  70.  */
  71. #define FPRS_FEF    0x0000000000000004    /* Enable Floating Point.    */
  72. #define FPRS_DU        0x0000000000000002    /* Dirty Upper.            */
  73. #define FPRS_DL        0x0000000000000001    /* Dirty Lower.            */
  74.  
  75. /* Version Register.
  76.  *
  77.  * ------------------------------------------------------
  78.  * | MANUF | IMPL | MASK | Resv | MAXTL | Resv | MAXWIN |
  79.  * ------------------------------------------------------
  80.  *  63   48 47  32 31  24 23  16 15    8 7    5 4      0
  81.  */
  82. #define VERS_MANUF    0xffff000000000000    /* Manufacturer.        */
  83. #define VERS_IMPL    0x0000ffff00000000    /* Implementation.        */
  84. #define VERS_MASK    0x00000000ff000000    /* Mask Set Revision.        */
  85. #define VERS_MAXTL    0x000000000000ff00    /* Maximum Trap Level.        */
  86. #define VERS_MAXWIN    0x000000000000001f    /* Maximum Reg Window Index.    */
  87.  
  88. #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
  89. #define set_pstate(bits)                    \
  90.     __asm__ __volatile__(                    \
  91.         "rdpr      %%pstate, %%g1\n\t"            \
  92.         "or        %%g1, %0, %%g1\n\t"            \
  93.         "wrpr      %%g1, 0x0, %%pstate\n\t"        \
  94.         : /* no outputs */                \
  95.         : "i" (bits)                    \
  96.         : "g1")
  97.  
  98. #define clear_pstate(bits)                    \
  99.     __asm__ __volatile__(                    \
  100.         "rdpr      %%pstate, %%g1\n\t"            \
  101.         "andn        %%g1, %0, %%g1\n\t"        \
  102.         "wrpr      %%g1, 0x0, %%pstate\n\t"        \
  103.         : /* no outputs */                \
  104.         : "i" (bits)                    \
  105.         : "g1")
  106.  
  107. #define change_pstate(bits)                    \
  108.     __asm__ __volatile__(                    \
  109.         "rdpr      %%pstate, %%g1\n\t"            \
  110.         "wrpr      %%g1, %0, %%pstate\n\t"        \
  111.         : /* no outputs */                \
  112.         : "i" (bits)                    \
  113.         : "g1")
  114. #endif
  115.  
  116. #endif /* !(_SPARC64_PSTATE_H) */
  117.